home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / c_lang / turcbook.lzh / THELP.C < prev    next >
Text File  |  1988-01-19  |  3KB  |  114 lines

  1. /* ---------- pg 130 ------------ thelp.c ------------------------------- */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include "twindow.h"
  6. #include "keys.h"
  7.  
  8. #define MAXHELPS 250
  9. #define HBG WHITE
  10. #define HFG BLACK
  11. #define HINT DIM
  12.  
  13. #define TRUE 1
  14. #define FALSE 0
  15.  
  16. static struct helps {
  17.   char hname[9];
  18.   int h,w;
  19.   long hptr;
  20.   } hps[MAXHELPS+1];
  21.  
  22. static int hp = 0;
  23. static int ch = 0;
  24. static int hx,hy;
  25. FILE *helpfp = NULL;
  26. long ftell();
  27. char *fgets();
  28. void help();
  29. char helpname[64];
  30. void getline(char *lineh);
  31.  
  32.  
  33. /* -------------- load the HELP! definition file --------------------- */
  34. void load_help(char *hn)
  35. {
  36.   extern void (*helpfunc)();
  37.   extern int helpkey;
  38.   char lineh[80];
  39.  
  40.   if (strcmp(helpname,hn) == 0)
  41.     return;
  42.   helpfunc = help;
  43.   helpkey = F1;                     /* What is the helpkey */
  44.   hp = 0;
  45.   strcpy(helpname,hn);
  46.   if((helpfp = fopen(helpname, "r")) == NULL)
  47.     return;
  48.   getline(lineh);
  49.   while(1) {
  50.     if(hp == MAXHELPS)
  51.         break;
  52.     if(strncmp(lineh, "<end>", 5) == 0)
  53.         break;
  54.     if (*lineh != '<')
  55.         continue;
  56.     hps[hp].h = 3;
  57.     hps[hp].w = 18;
  58.     strncpy(hps[hp].hname, lineh+1, 8);
  59.     hps[hp].hptr = ftell(helpfp);
  60.     getline(lineh);
  61.     while( *lineh != '<') {
  62.         hps[hp].h++;
  63.         hps[hp].w = max(hps[hp].w, strlen(lineh)+2);
  64.         getline(lineh);
  65.         }
  66.     hp++;
  67.     }
  68. }
  69.  
  70.  
  71. /* --------------- get a line of text from the help file ---------------- */
  72. static void getline(char *lineh)
  73. {
  74.   if(fgets(lineh,80,helpfp) == NULL)
  75.     strcpy(lineh, "<end>");
  76. }
  77.  
  78. /* -------------- set the current active help screen -------------------- */
  79. void set_help(char *s, int x, int y)
  80. {
  81.   for (ch=0; ch<hp; ch++)
  82.     if(strncmp(s,hps[ch].hname,8) == 0)
  83.       break;
  84.   hx=x;
  85.   hy=y;
  86. }
  87.  
  88. /* --------------- display the current help window ---------------------- */
  89. void help()
  90. {
  91.   char ln[80];
  92.   int i,xx,yy;
  93.   WINDOW *wnd;
  94.   extern int helpkey;
  95.   if(hp && ch != hp) {
  96.     curr_cursor(&xx,&yy);
  97.     cursor(0,25);
  98.     wnd = establish_window(hx,hy,hps[ch].h, hps[ch].w);
  99.     set_colors(wnd, ALL, HBG, HFG, HINT);
  100.     display_window(wnd);
  101.     fseek(helpfp,hps[ch].hptr,0);
  102.     for(i=0;i<hps[ch].h-3;i++) {
  103.       getline(ln);
  104.       wprintf(wnd,ln);
  105.       }
  106.     wprintf(wnd, " [F1] to return ");
  107.     while( get_char() != helpkey)
  108.             ;
  109.        /* putchar(BELL); */
  110.     delete_window(wnd);
  111.     cursor(xx,yy);
  112.     }
  113. }
  114.